package someTestExcemple.huaweiOd.sort;
//华为OD机试 - 比赛的冠亚季军（Java 2025 A卷 100分）
//https://blog.csdn.net/guorui_java/article/details/131827784
import java.util.*;
//一、题目描述
//        有个运动员，他们的id为0到N-1,他们的实力由一组整数表示。他们之间进行比赛，需要决出冠亚军。比赛的规则是0号和1号比赛，2号和3号比赛，以此类推，每一轮，相邻的运动员进行比赛，获N (3\leq N< 10000)胜的进入下一轮，实力值大的获胜，实力值相等的情况，id小的情况下获胜，轮空的直接进入下一轮。
//
//        二、输入描述
//        输入一行N个数字代表N的运动员的实力值。
//
//        (0 <= 实力值 <= 10000000000)。
//
//        三、输出描述
//        输出冠亚季军的id，用空格隔开。
public class KnockoutGame {
    static class Player {
        int index; //id
        int strength; //优势

        public Player(int index, int strength) {
            this.index = index;
            this.strength = strength;
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //前提假设n至少为3
        //个人理解，如果N是数量不大于3，直接看出冠亚季
        //如果N>3 一直必到最后剩下4个或者3个人的时候，再来出现冠亚季
        //6-->3 直接到3了
        //所以最后一轮最多有4个人
        int[] initArr = Arrays.stream(sc.nextLine().split("\\s")).mapToInt(Integer::parseInt).toArray();
        int N = initArr.length;
        if(N < 3) {
            System.out.println("error!");
            return;
        }

        List<Player> playerList = new ArrayList<>();
        for(int i=0;i<N;i++) {
            playerList.add(new Player(i,initArr[i]));
        }
        while(true) {
            int len = playerList.size();
            if(len ==3 || len==4) {
                break;
            }
            //晋级下一轮
            List<Player> nextRound = new ArrayList<>();
            for(int i=0;i<len;i+=2) {
                if(i+1 < len) {
                    Player p1 = playerList.get(i);
                    Player p2 = playerList.get(i+1);
                    if(p1.strength > p2.strength ||
                            (p1.strength==p2.strength && p1.index < p2.index)) {
                        nextRound.add(p1);
                    } else {
                        nextRound.add(p2);
                    }

                } else {
                    //奇数人数的最后一个人直接轮空
                    nextRound.add(playerList.get(i));

                }
            }
            playerList = nextRound;
        }
        List<Player> winner = new ArrayList<>();
        if(playerList.size()==3) {
            playerList.sort((o1, o2) -> {
                if(o1.strength != o2.strength) {
                    return  o2.strength -o1.strength;
                } else {
                    return o1.index-o2.index;
                }
            });
            winner = playerList;

        } else if(playerList.size() ==4) {
            List<Player> losers = new ArrayList<>();
            while(playerList.size() > 2) {
                List<Player> nextRound = new ArrayList<>();

                for(int i=0;i<playerList.size();i+=2) {
                    Player p1 = playerList.get(i);
                    Player p2 = playerList.get(i+1);
                    if(p1.strength > p2.strength ||(p1.strength == p2.strength && p1.index < p2.index)) {
                        nextRound.add(p1);
                        losers.add(p2);
                    } else {
                        nextRound.add(p2);
                        losers.add(p1);
                    }
                }
                playerList = nextRound;
            }
            //决出冠亚军
            playerList.sort((o1, o2) -> {
                if(o1.strength != o2.strength) {
                    return  o2.strength -o1.strength;
                } else {
                    return o1.index-o2.index;
                }
            });
            //决出季军
            losers.sort((o1, o2) -> {
                if(o1.strength != o2.strength) {
                    return  o2.strength -o1.strength;
                } else {
                    return o1.index-o2.index;
                }
            });
            winner = playerList;
            winner.add(losers.get(0));
        }
        StringBuilder builder = new StringBuilder();
        for(Player player : winner) {
            builder.append(player.index+" ");
        }
        builder.deleteCharAt(builder.length()-1);
        System.out.println(builder.toString());
    }
}
